package org.xxmi.thread;

/**
 * 单实例：线程安全
 */

class Singleton {
    public static Singleton singleton = null;

    public static Singleton getSingleton() {
        if (singleton == null) {    // 多一个判断，效率相对要高一点。后面的线程不用等了，直接拿。
            // 用当前对象本身来充当锁
            // Singleton.class 返回的也是一个对象
            Class<Singleton> lock = Singleton.class;
            synchronized (lock) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

public class TestSingleton {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getSingleton();
        Singleton s2 = Singleton.getSingleton();
        // 判断是否属于同一个实例用 ==
        System.out.println(s1 == s2);
    }
}
